#pragma once
#include "..\DXAMLCommon.h"
#include "DeclName.h"
#include "DeclElementModel.h"
#include "_stack.h"
#include "StringPtrDictionary.h"

class DeclAttDef;

class DeclElement :
	public DeclName,
	public DeclElementModel
{
protected: 
	DeclElement(const DeclElement &);
public: 

	DeclElement(struct IMalloc * pMalloc, struct StringPtr * pName);
	virtual ~DeclElement();
	void Initialize();
	DeclAttDef * LookupAttDef(struct StringPtr * pName);
	DeclAttDef * PushNewAttDef(struct StringPtr * pName);
	_stack<DeclAttDef *,4> * GetAttDefs();
protected: 
	void operator=(const DeclElement &);
	_stack<DeclAttDef *,4> _attDefs;
	StringPtrDictionary<DeclAttDef *> _attDefsHashTable;
};